home *** CD-ROM | disk | FTP | other *** search
-
-
-
- RRRREEEECCCCVVVV((((2222)))) RRRREEEECCCCVVVV((((2222))))
-
-
-
- NNNNAAAAMMMMEEEE
- recv, recvfrom, recvmsg - receive a message from a socket
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ####iiiinnnncccclllluuuuddddeeee <<<<ssssyyyyssss////ttttyyyyppppeeeessss....hhhh>>>>
- ####iiiinnnncccclllluuuuddddeeee <<<<ssssyyyyssss////ssssoooocccckkkkeeeetttt....hhhh>>>>
-
- iiiinnnntttt rrrreeeeccccvvvv((((iiiinnnntttt ssss,,,, vvvvooooiiiidddd ****bbbbuuuuffff,,,, iiiinnnntttt lllleeeennnn,,,, iiiinnnntttt ffffllllaaaaggggssss))));;;;
- iiiinnnntttt rrrreeeeccccvvvvffffrrrroooommmm((((iiiinnnntttt ssss,,,, vvvvooooiiiidddd ****bbbbuuuuffff,,,, iiiinnnntttt lllleeeennnn,,,, iiiinnnntttt ffffllllaaaaggggssss,,,,
- ssssttttrrrruuuucccctttt ssssoooocccckkkkaaaaddddddddrrrr ****ffffrrrroooommmm,,,, iiiinnnntttt ****ffffrrrroooommmmlllleeeennnn))));;;;
- iiiinnnntttt rrrreeeeccccvvvvmmmmssssgggg((((iiiinnnntttt ssss,,,, ssssttttrrrruuuucccctttt mmmmssssgggghhhhddddrrrr ****mmmmssssgggg,,,, iiiinnnntttt ffffllllaaaaggggssss))));;;;
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- _R_e_c_v, _r_e_c_v_f_r_o_m, and _r_e_c_v_m_s_g are used to receive messages from a socket.
-
- The _r_e_c_v call is normally used only on a _c_o_n_n_e_c_t_e_d socket (see
- _c_o_n_n_e_c_t(2)), while _r_e_c_v_f_r_o_m and _r_e_c_v_m_s_g may be used to receive data on a
- socket whether it is in a connected state or not.
-
- If _f_r_o_m is non-zero, the source address of the message is filled in.
- _F_r_o_m_l_e_n is a value-result parameter, initialized to the size of the
- buffer associated with _f_r_o_m, and modified on return to indicate the
- actual size of the address stored there. A successful call returns the
- length of the message. If a message is too long to fit in the supplied
- buffer, excess bytes may be discarded depending on the type of socket the
- message is received from (see _s_o_c_k_e_t(2)).
-
- If no messages are available at the socket, the receive call waits for a
- message to arrive, unless the socket is nonblocking (see _i_o_c_t_l(2)) in
- which case the call returns -1 with the external variable errno set to
- EWOULDBLOCK.
-
- The _s_e_l_e_c_t(2) call may be used to determine when more data arrives.
-
- The _f_l_a_g_s argument to a recv call is formed by _o_r'ing one or more of the
- values,
-
- #define MSG_OOB 0x1 /* process out-of-band data */
- #define MSG_PEEK 0x2 /* peek at incoming message */
- #define MSG_WAITALL 0x40 /* wait for full request or error */
- #define MSG_DONTWAIT 0x80 /* this message should be nonblocking */
-
- The _r_e_c_v_m_s_g call uses a _m_s_g_h_d_r structure to minimize the number of
- directly supplied parameters. This structure has the following form, as
- defined in <_s_y_s/_s_o_c_k_e_t._h>:
-
- struct msghdr {
- caddr_t msg_name; /* optional address */
- int msg_namelen; /* size of address */
- struct iovec *msg_iov; /* scatter/gather array */
- int msg_iovlen; /* # elements in msg_iov */
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- RRRREEEECCCCVVVV((((2222)))) RRRREEEECCCCVVVV((((2222))))
-
-
-
- caddr_t msg_accrights; /* access rights sent/received */
- int msg_accrightslen;
- };
-
- Here _m_s_g__n_a_m_e and _m_s_g__n_a_m_e_l_e_n specify the destination address if the
- socket is unconnected; _m_s_g__n_a_m_e may be given as a null pointer if no
- names are desired or required. The _m_s_g__i_o_v and _m_s_g__i_o_v_l_e_n describe the
- scatter/gather locations. The _i_o_v_e_c structure is defined as
-
- struct iovec {
- caddr_t iov_base;
- int iov_len;
- };
-
- Each _i_o_v_e_c entry specifies the base address and length of an area in
- memory where data should be placed. _r_e_c_v_m_s_g will always fill an area
- completely before proceeding to the next.
-
- A buffer to receive any access rights sent along with the message is
- specified in _m_s_g__a_c_c_r_i_g_h_t_s, which has length _m_s_g__a_c_c_r_i_g_h_t_s_l_e_n. Access
- rights are opaque data that are interpreted within the context of the
- communication domain and are currently limited to file descriptors, which
- each occupy the size of an iiiinnnntttt (see _u_n_i_x(7F) for details).
-
- RRRREEEETTTTUUUURRRRNNNN VVVVAAAALLLLUUUUEEEE
- These calls return the number of bytes received, or -1 if an error
- occurred.
-
- EEEERRRRRRRROOOORRRRSSSS
- The calls fail if:
-
- [EBADF] The argument _s is an invalid descriptor.
-
- [ENOTSOCK] The argument _s is not a socket.
-
- [EWOULDBLOCK] The socket is marked non-blocking and the receive
- operation would block.
-
- [EINTR] The receive was interrupted by delivery of a signal
- before any data was available for the receive.
-
- [EFAULT] The data was specified to be received into a non-
- existent or protected part of the process address
- space.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- fcntl(2), getsockopt(2), read(2), select(2), send(2), socket(2)
-
- NNNNOOOOTTTTEEEESSSS
- ABI-compliant versions of the above calls can be obtained from
- _l_i_b_s_o_c_k_e_t._s_o.
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- RRRREEEECCCCVVVV((((2222)))) RRRREEEECCCCVVVV((((2222))))
-
-
-
- When using _r_e_c_v_m_s_g to receive access rights, it may be necessary for the
- application to request a single byte of normal data as well, so that the
- call does not return immediately if the access rights are not yet
- present. Doing so will cause the _r_e_c_v_m_s_g call to block until the access
- rights are available.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-